Computing systems have transformed the way people work, play, and communicate. Reliable data storage devices are important, if not fundamental, to the operation of a computing system. One of the first data storage devices was a hard disk, which mechanically rotates a physical storage medium in order to read from or write to the hard disk. Such traditional hard disks had a block-based interface, in which the data on the hard disk is organized into fixed sized blocks of data. The hard disk also included an index to assist the file system in finding the blocks. During runtime, the index is loaded into the computing system's memory. Due to the size of the index, the memory can often only contain a portion of the index at any given time.
Traditional file systems are also block-based. For instance, the file system receives file commands from the application(s) running on the computing system. The file system maps the files to one or more blocks, and then the index loaded from the block-based disk is used to complete the corresponding block read and write requests needed to satisfy the higher-level file request received by the file system. In more modern times, other types of modern storage media are available. Such modern storage media may often be solid-state, such as NAND flash memory chips. Regardless, such modern storage media often still takes the historical block-based approach, using block-based file systems that interface using block-based commands. Examples of block-based file systems include the File Allocation Table (FAT) file system and the New Technology File System (NTFS). The NTFS file system is in widespread use.
More recently, object-based storage devices (sometimes referred to in the art as an “OSD”) have been developed. Such object-based storage devices contain data structures called “objects” that are variable-sized data-storage containers. Each object includes data and properties. The data is consumable by the entity (e.g., the application) requesting the objects. The properties include an object identifier, attributes, and metadata. The object-based storage device provides its own mechanism for allocating and placement of storage for the objects, rather than rely on a file system. Furthermore, the object-based storage device does not use a memory-intensive index to track objects. Rather than being a flat list of fixed-sized memory locations, as is the case with block-based storage, the objects in an object-based storage device may be any size, and may be interrelated, and perhaps hierarchically structured, with related objects perhaps being distributed across multiple object-based storage devices. Such distributed object hierarchies are enabled by keeping the metadata for each object local to the application that accesses the hierarchy, while allowing the data itself to be distributed.
Object-based file systems have the capability to interface with object-based storage devices by communicating using an appropriate object-based interface standard recognized by both the file system and the storage devices. There are flexible object-based interface standards now available for interfacing with such object-based storage devices. One standard is the ANSI T10 SCSI OSD standard.
Thus, object-based file systems may interact with object-based storage devices to provide a robust and flexible object-based data model to the application. Some object-based file systems are also capable of interfacing with block-based storage devices. In that case, objects are mapped to particular blocks of memory, and the object-based file system uses that mapping to access appropriate blocks of memory corresponding to a desired object to be accessed.